﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BE;
using BLL;
using VentaPorCatalogos.UserControls;
using BE.SearchCriteria;
using VentaPorCatalogos.Common;
using Common;

using BLL.Exceptions;

namespace VentaPorCatalogos.Pages 
{
    public partial class Devoluciones : VentaPorCatalogos.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ViewState.Add("FormBehavior", behavior.Initial);
                Session["SearchCriteria"] = null;
                Session["Model"] = null;

                CargarCausas();
                CargarEstadosDevoluciones();
            }
        }

        protected void Page_PreRender(object sender, EventArgs e)
        {
            ConfigurarFormBehaviour();
        }

        #region "Buttons"
        protected void botComandos_OnBotonClick(object sender, BotoneraEventArgs e)
        {
            try
            {
                DevolucionBE oDevolucionBE = new DevolucionBE();
                behavior wComportamiento;

                switch (e.Boton)
                {
                    case BotonesTipos.Buscar:
                        if (BuscarElemento())
                            SetFormBehaviour(behavior.View);
                        else
                            e.CancelarOperacion = true;  // Evita que la botonera pase a modo consulta, si no se encontró un elemento.                        
                        break;

                    case BotonesTipos.Nuevo:
                        SetFormBehaviour(behavior.New);
                        HabilitarControles(true, divCampos.Controls);
                        BlanquearControles(divCampos.Controls);
                        ValidarPerfil();
                        break;

                    case BotonesTipos.Editar:
                        SetFormBehaviour(behavior.Edit);
                        HabilitarControles(true);
                        ValidarPerfil();
                        break;

                    case BotonesTipos.Eliminar:
                        oDevolucionBE = GetModel<DevolucionBE>();
                        DevolucionBLL.DeleteByIdDevolucion(oDevolucionBE.IdDevolucion);
                        SetModel<DevolucionBE>(null);
                        BlanquearControles(divCampos.Controls);
                        SetFormBehaviour(behavior.Initial);
                        break;

                    case BotonesTipos.Aceptar:
                        wComportamiento = (behavior)ViewState["FormBehavior"];
                        LeerDatosDesdeControles(oDevolucionBE);

                        switch (wComportamiento)
                        {
                            case behavior.New:
                                DevolucionBLL.InsertarDevolucion(oDevolucionBE);
                                hidIdElemento.Value = oDevolucionBE.IdDevolucion.ToString();
                                BuscarElemento();
                                MostrarMensaje("Devolución registrada correctamente");
                                break;
                            case behavior.Edit:
                                DevolucionBLL.UpdateDevolucion(oDevolucionBE);
                                MostrarMensaje("Devolución modificada correctamente");
                                break;
                        }
                        SetFormBehaviour(behavior.View);
                        break;
                    case BotonesTipos.Cancelar:
                        SetFormBehaviour(behavior.Initial);
                        break;
                    default:
                        break;
                }
            }
            catch (BLLException bllEx)
            {
                MostrarMensaje(bllEx.Message);
            }
            catch (Exception)
            {
                MostrarMensaje("Se ha producido un inconveniente procesando la operación. Por favor intente nuevamente.");
            }
        }
    
        protected void btnSelVendedor_Click(object sender, ImageClickEventArgs e)
        {
            int wCount = 0;

            if (txtVendedor.Text.Trim().Length > 0)
            {
                VendedorSC wFiltroSC = new VendedorSC();
                wFiltroSC.IdVendedor = Int32.Parse(hidIdVendedor.Value);
                List<VendedorBE> wListResultado = VendedorBLL.SeleccionarTodos(wFiltroSC, 0, null, ref wCount);
                if (wListResultado != null && wListResultado.Count > 0)
                {
                    if (wListResultado.Count == 1)
                    {
                        hidIdVendedor.Value = wListResultado[0].IdVendedor.ToString();
                        txtVendedor.Text = wListResultado[0].ApellidoNombre;
                        //MostrarZonas();
                    }
                    else
                        EjecutarScript(string.Format("SeleccionarVendedor(\"{0}\");", txtVendedor.Text));
                }
                else
                {
                    txtVendedor.Text = string.Empty;
                    EjecutarScript("alert(\"Sin resultados para el filtro especificado.\");");
                }
            }
            else
            {
                EjecutarScript(string.Format("SeleccionarVendedor(\"{0}\");", txtVendedor.Text));
            }

        }

        protected void btnSelCampaña_Click(object sender, ImageClickEventArgs e)
        {
            int wCount = 0;

            if (txtCampaña.Text.Trim().Length > 0)
            {
                CampañaSC wFiltroSC = new CampañaSC();
                wFiltroSC.Descripcion = txtCampaña.Text;
                List<CampañaBE> wListResultado = CampañaBLL.SeleccionarPorParametros(wFiltroSC, 0, null, ref wCount);
                if (wListResultado != null && wListResultado.Count > 0)
                {
                    if (wListResultado.Count == 1)
                    {
                        hidIdCampaña.Value = wListResultado[0].IdCampaña.ToString();
                        txtCampaña.Text = wListResultado[0].Descripcion;
                        //MostrarZonas();
                    }
                    else
                        EjecutarScript(string.Format("SeleccionarCampaña(\"{0}\");", txtCampaña.Text));
                }
                else
                {
                    txtCampaña.Text = string.Empty;
                    EjecutarScript("alert(\"Sin resultados para el filtro especificado.\");");
                }
            }
            else
            {
                EjecutarScript(string.Format("SeleccionarCampaña(\"{0}\");", txtCampaña.Text));
            }

        }

        protected void btnSelArticulo_Click(object sender, ImageClickEventArgs e)
        {
            int wCount = 0;

            if (txtArticulo.Text.Trim().Length > 0)
            {
                ArticuloSC wFiltroSC = new ArticuloSC();
                wFiltroSC.Descripcion = txtArticulo.Text;
                List<ArticuloBE> wListResultado = ArticuloBLL.SeleccionarPorParametros(wFiltroSC, 0, null, ref wCount);
                if (wListResultado != null && wListResultado.Count > 0)
                {
                    if (wListResultado.Count == 1)
                    {
                        hidIdArticulo.Value = wListResultado[0].IdArticulo.ToString();
                        txtArticulo.Text = wListResultado[0].Descripcion;
                        //MostrarZonas();
                    }
                    else
                        EjecutarScript(string.Format("SeleccionarArticulo(\"{0}\");", txtArticulo.Text));
                }
                else
                {
                    txtArticulo.Text = string.Empty;
                    EjecutarScript("alert(\"Sin resultados para el filtro especificado.\");");
                }
            }
            else
            {
                EjecutarScript(string.Format("SeleccionarArticulo(\"{0}\");", txtArticulo.Text));
            }
        }

        #endregion

        #region "Method"
            private bool BuscarElemento()
        {
            try
            {
                int id;
                if (!int.TryParse(hidIdElemento.Value, out id))
                    return false;                

                DevolucionBE oDevolucionBE = new DevolucionBE();
                oDevolucionBE.IdDevolucion = id;

                oDevolucionBE = DevolucionBLL.SeleccionarPorId(oDevolucionBE);
                SetModel<DevolucionBE>(oDevolucionBE);

                // Mostrar datos del Devolucion
                lblIdDevolucion.Text = oDevolucionBE.IdDevolucion.ToString();

                hidIdVendedor.Value = oDevolucionBE.Vendedor.IdVendedor.ToString();
                txtVendedor.Text = oDevolucionBE.Vendedor.ApellidoNombre;
                hidIdCampaña.Value = oDevolucionBE.Campaña.IdCampaña.ToString();  
                txtCampaña.Text = oDevolucionBE.Campaña.Descripcion; 
                hidIdArticulo.Value = oDevolucionBE.Articulo.CodArticulo;
                txtArticulo.Text = oDevolucionBE.Articulo.Descripcion + " " + oDevolucionBE.Presentacion.Descripcion;
                txtCantidad.Text = oDevolucionBE.Cantidad.ToString();
                ddlCausa.SelectedValue = oDevolucionBE.CausaDevolucion.IdCausa.ToString();
                txtObservacion.Text = oDevolucionBE.Observaciones;
                ddlEstadosDevoluciones.SelectedValue = oDevolucionBE.Estado.ToString();

                return true;
            }
            catch (Exception)
            {
                throw;
            }
        }

            private void ConfigurarFormBehaviour()
            {
                behavior wComportamiento;
                wComportamiento = GetFormBehaviour();
                switch (wComportamiento)
                {
                    case behavior.Initial:                        
                        HabilitarControles(false, divCampos.Controls);
                        break;

                    case behavior.New:
                        break;

                    case behavior.Edit:
                        break;

                    case behavior.View:
                        HabilitarControles(false);
                        break;
                }
            }

            private void ValidarPerfil()
            {
                UsuarioBE oUsuarioBE;
                oUsuarioBE = (UsuarioBE) Session["User"];

                if (oUsuarioBE.Perfil.ToLower().Equals("vendedor"))
                {
                    // deshabilitar vendedor y setear el actual 
                    VendedorBE oVendedorBE = new VendedorBE();
                    oVendedorBE.IdVendedor = oUsuarioBE.IdVendedor;
                    oVendedorBE = VendedorBLL.SeleccionarPorId(oVendedorBE);

                    hidIdVendedor.Value = oVendedorBE.IdVendedor.ToString();
                    txtVendedor.Text = oVendedorBE.ApellidoNombre;

                    txtVendedor.ReadOnly = true;
                    ddlEstadosDevoluciones.Enabled = false;
                    btnSelVendedor.Enabled = false; 
                }
                else if (oUsuarioBE.Perfil.ToLower().Equals("gerente zonal"))
                {
                    txtVendedor.ReadOnly = false;
                    ddlEstadosDevoluciones.Enabled = true;
                    btnSelVendedor.Enabled = true;
                }

            }

            private void LeerDatosDesdeControles(DevolucionBE oDevolucionBE)
            {

                int resultado;
                if (int.TryParse(lblIdDevolucion.Text, out resultado))
                    oDevolucionBE.IdDevolucion = resultado;

                int Vendedor;
                oDevolucionBE.Vendedor = new VendedorBE();
                if (int.TryParse(hidIdVendedor.Value, out Vendedor))
                    oDevolucionBE.Vendedor.IdVendedor = Vendedor;
                oDevolucionBE.Vendedor.Nombre = txtVendedor.Text; 

                int campaña;
                oDevolucionBE.Campaña = new CampañaBE();
                if (int.TryParse(hidIdCampaña.Value , out campaña))
                    oDevolucionBE.Campaña.IdCampaña = campaña;

                
                oDevolucionBE.Articulo = new ArticuloBE();
                oDevolucionBE.Presentacion = new PresentacionBE();

                String wArticulo = hidIdArticulo.Value.ToString();
                String[] wKey = wArticulo.Split('-');
                oDevolucionBE.Articulo.IdArticulo = Convert.ToInt32( wKey[0]);
                oDevolucionBE.Presentacion.IdPresentacion = Convert.ToInt32(wKey[1]);
                oDevolucionBE.Articulo.Descripcion = txtArticulo.Text; 

                oDevolucionBE.Cantidad = int.Parse(txtCantidad.Text);
                oDevolucionBE.FechaAlta = DateTime.Today;

                int causaValidacion;
                oDevolucionBE.CausaDevolucion = new CausaDevolucionBE();
                if (int.TryParse(ddlCausa.SelectedValue, out causaValidacion))
                    oDevolucionBE.CausaDevolucion.IdCausa = causaValidacion;

                oDevolucionBE.Observaciones = txtObservacion.Text;

                oDevolucionBE.Estado = Convert.ToInt32(ddlEstadosDevoluciones.SelectedValue);
                
            }

            private void CargarCausas()
            {
                int pCountReg = 0;
                CausaDevolucionSC oCausaDevolucionSC = new CausaDevolucionSC();  
                List<CausaDevolucionBE> wListCausaDevolucion = new List<CausaDevolucionBE>();
                wListCausaDevolucion = CausaDevolucionBLL.SeleccionarPorParametros(oCausaDevolucionSC, 0, 0, ref pCountReg);


                if (wListCausaDevolucion != null && wListCausaDevolucion.Count > 0)
                {
                    ddlCausa.DataSource = wListCausaDevolucion;
                    ddlCausa.DataTextField = "Descripcion";
                    ddlCausa.DataValueField = "IdCausa";
                    ddlCausa.DataBind();
                
                }



            
            }

            private void CargarEstadosDevoluciones()
            {
                ddlEstadosDevoluciones.DataSource = Enumeraciones.GetAll<EstadosDevoluciones>();
                ddlEstadosDevoluciones.DataTextField = "Value";
                ddlEstadosDevoluciones.DataValueField = "Key";
                ddlEstadosDevoluciones.DataBind();
            }

        #endregion
    }
}